#1 导入依赖
import requests
from lxml import etree

#2 发送请求和获取响应
html = requests.get('https://www.dushu.com/lianzai/1126.html')
html.encoding='utf-8'
html_text2 = html.text
# print(html_text2)


#2.2 创建节点树的第二种方式：如果爬取的html文本如何转换为节点树?
# 解析html文件，返回一个节点树的对象
html_selector = etree.HTML(html_text2)

#3 获取根节点html的元素
'''参考思路：先获取图片路径，再获取书名、作者、描述。最后把这4个信息一对一组装起来。

标准：
1、能通过requests访问指定网址拿到html响应内容 20%
2、能获取图片路径 20%，书名10%、作者20%、描述10%
3、能把上述内容组装成如下截图 10%，把如下截图内容保存为文本txt文件10%
爬取内容能运行，但是有错误（对不上）则只算该项完成一半进度'''

#3.1先获取图片路径
imgs=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/div/a/img/@data-original")
print(len(imgs))
#3.2再获取书名
booknames=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/h3/a/text()")
print(len(booknames))
#3.3再获取作者名
# authors=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/p[1]/text()")
# print(authors)

# 检查后发现作者名得到的并不完整，需要用代码补全，有的是有a标签
# 第1种思路：分类讨论：把有a标签的和没a标签的分别获取，再组装起来
authors=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/p[1]")
# print(authors)
    # 思路：
    # if authors有a标签，那么加上a标签的内容，拼接
    #
    # else: authors没有a标签，直接使用上面的xpath路径

# 创建1个空的列表存储正确的作者名
authors2=[]
for i in authors:
    # print(i)
    if i.xpath("./a"):  #不是空，表示有a标签
        # print("不是空，表示有a标签")
        # print(i.xpath("./a/text()"))

        #到鲁迅的时候，会出现只有a标签，没有a标签外面的内容，所以还需要做第2层判断
        if i.xpath("./text()"): #如果a标签外面，还有文本，那么不为空，此时再把两者拼接起来
            # 把a标签外面的内容和a标签里面的内容合并
            # print(i.xpath("./text()")[0] + i.xpath("./a/text()")[0])
            authors2.append(i.xpath("./text()")[0] + i.xpath("./a/text()")[0])
        else: #有a标签，但是也只有a标签，此时，直接获取a标签内容即可，添加到作者名里
            authors2.append( i.xpath("./a/text()")[0])
    else:  #没有a标签
        # print(i.xpath("./text()"))
        authors2.append(i.xpath("./text()")[0])

print(len(authors2))

#获取一段话描述
descriptions=html_selector.xpath("/html/body/div[6]/div/div[2]/div[2]/ul/li/div/p[2]/text()")
print(len(descriptions))

print(type(descriptions))#<class 'list'>

zipped_lists = zip(imgs, booknames, authors2,descriptions)
# print(zipped_lists)



with open("./books.txt", 'w', encoding='utf-8') as file:
    for i in zipped_lists:
        file.write(str(i)+"\n")

